import pandas as pd
import matplotlib.pyplot as plt
import strym
from strym import strymread
import seaborn as sea
from strym import phasespace
import numpy as np
import tables
plt.rcParams['figure.figsize'] = (16, 8)
DataFolder = "/home/ivory/CyverseData/JmscslgroupData/PandaData/2020_03_03/"
import glob
csvlist1 = glob.glob(DataFolder+"*.csv")
DataFolder = "/home/ivory/CyverseData/JmscslgroupData/PandaData/2020_03_05/"
csvlist2 = glob.glob(DataFolder+"*.csv")
dbcfile = '/home/ivory/VersionControl/Jmscslgroup/strym/examples/newToyotacode.dbc'
rlist = []
for csv in csvlist1:
r = strymread(csvfile=csv, dbcfile=dbcfile)
rlist.append(r)
for csv in csvlist2:
r = strymread(csvfile=csv, dbcfile=dbcfile)
rlist.append(r)
df = rlist[0].acc_state()
df.loc[(df.Message == 'disabled'),'Message']=2
df.loc[(df.Message == 'hold'),'Message'] = 11
df.loc[(df.Message == 'hold_waiting_user_cmd'),'Message'] = 10
df.loc[(df.Message == 'enabled'),'Message'] = 6
df.loc[(df.Message == 'faulted'),'Message'] = 5
fig, ax = strym.create_fig(1)
plt.rcParams["figure.figsize"] = (16,6)
ax[0].scatter(x='Time', y='Message', data=df,c = 'Time', s= 15)
plt.yticks([0, 2, 5, 6, 10, 11], ['0', 'disabled (2)', 'faulted (5)', 'enabled (6)', 'hold_waiting_user_cmd (10)', 'hold (11)'])
plt.title("ACC State", fontsize=18)
plt.xlabel('Time', fontsize=16)
plt.ylabel('Cruise Control State', fontsize=16)
plt.show()
df_subset_acc_on = rlist[0].msg_subset(conditions="cruise control on")
r_acc_on = strymread(df_subset_acc_on.dataframe, dbcfile = dbcfile)
acc_state = r_acc_on.acc_state()
acc_state.loc[(acc_state.Message == 'disabled'),'Message']=2
acc_state.loc[(acc_state.Message == 'hold'),'Message'] = 11
acc_state.loc[(acc_state.Message == 'hold_waiting_user_cmd'),'Message'] = 10
acc_state.loc[(acc_state.Message == 'enabled'),'Message'] = 6
acc_state.loc[(acc_state.Message == 'faulted'),'Message'] = 5
fig, ax = strym.create_fig(1)
plt.rcParams["figure.figsize"] = (16,6)
ax[0].scatter(x='Time', y='Message', data=acc_state,c = 'Time', s= 15)
plt.yticks([0, 2, 5, 6, 10, 11], ['0', 'disabled (2)', 'faulted (5)', 'enabled (6)', 'hold_waiting_user_cmd (10)', 'hold (11)'])
plt.title("ACC State", fontsize=18)
plt.xlabel('Time', fontsize=16)
plt.ylabel('Cruise Control State', fontsize=16)
plt.show()
speed = r_acc_on.speed()
speed['Message'] = speed['Message']*0.277778
vehicle_to_vehicle_distance = r_acc_on.get_ts(msg="DSU_CRUISE", signal="LEAD_DISTANCE")
fig, ax = strym.create_fig(3)
ax[0].scatter(x = speed['Time'], y=speed['Message'], c=speed['Time'], cmap='winter', s= 3)
ax[0].set_title('Speed when ACC is on')
ax[0].set_xlabel('Time')
ax[0].set_ylabel('Speed Message')
ax[1].scatter(x = vehicle_to_vehicle_distance['Time'], y=vehicle_to_vehicle_distance['Message'], c=vehicle_to_vehicle_distance['Time'], cmap='winter', s= 3)
ax[1].set_title('Vehicle-to-Vehicle Distance when ACC is on')
ax[1].set_xlabel('Time')
ax[1].set_ylabel('Vehicle-to-Vehicle Distance Message')
ax[2].scatter(x = vehicle_to_vehicle_distance['Time'], y=vehicle_to_vehicle_distance['Message'], marker='o', s= 5)
ax[2].scatter(x = speed['Time'], y=speed['Message'], s= 5, marker='^')
ax[2].set_title('Vehicle-to-Vehicle Distance, and Speed when ACC is on')
ax[2].set_xlabel('Time')
ax[2].set_ylabel('Messages')
ax[2].legend(['Vehicle-to-Vehicle Distance', 'Speed'])
plt.show()
def speed_headway_plot(strymread_obj):
print("===================================")
print("Reading data file: {}".format(strymread_obj.csvfile))
df_subset_acc_on = strymread_obj.msg_subset(conditions="cruise control on")
if df_subset_acc_on == None:
return
r_acc_on = strymread(df_subset_acc_on.dataframe, dbcfile = dbcfile)
speed = r_acc_on.speed()
speed['Message'] = speed['Message']*0.277778
vehicle_to_vehicle_distance = r_acc_on.get_ts(msg="DSU_CRUISE", signal="LEAD_DISTANCE")
# Resample everything, so that we divide
new_speed_o, new_headway_o = strym.ts_sync(speed, vehicle_to_vehicle_distance, rate="second")
speed_headway = pd.DataFrame()
speed_headway['Time'] = new_speed_o['Time']
speed_headway['Speed'] = new_speed_o['Message']
speed_headway['Headway'] = new_headway_o['Message']
# filter out really low speed, so as not to overshoot distance/speed
high_speed_index = speed_headway['Speed'] > 1.0
speed_headway = speed_headway.ix[high_speed_index]
fig, ax = strym.create_fig(4)
ax[0].scatter(x = speed_headway['Time'], y=speed_headway['Speed'], color = "green", s= 6, marker ='o', alpha = 0.7)
ax[0].scatter(x = speed['Time'], y=speed['Message'], color = "red", s= 3, marker ='^', alpha = 0.3)
ax[0].set_title('Speed when ACC is on')
ax[0].set_xlabel('Time')
ax[0].set_ylabel('Speed Message [m/s]')
ax[0].legend(['Resampled Speed', 'Original Speed'])
ax[1].scatter(x = speed_headway['Time'], y=speed_headway['Headway'], c=speed_headway['Time'], cmap='winter', s= 3)
ax[1].set_title('Vehicle-to-Vehicle Distance when ACC is on')
ax[1].set_xlabel('Time')
ax[1].set_ylabel('Vehicle-to-Vehicle Distance Message [m]')
ax[2].scatter(x = speed_headway['Time'], y=speed_headway['Headway'], marker='o', s= 5)
ax[2].scatter(x = speed_headway['Time'], y=speed_headway['Speed'], s= 5, marker='^')
ax[2].set_title('Vehicle-to-Vehicle Distance, and Speed when ACC is on')
ax[2].set_xlabel('Time')
ax[2].set_ylabel('Messages')
ax[2].legend(['Vehicle-to-Vehicle Distance [m]', 'Speed [m/s]'])
distance_by_speed = pd.DataFrame()
distance_by_speed['Time'] = speed_headway['Time']
distance_by_speed['Message'] = speed_headway['Headway']/speed_headway['Speed']
high_index = distance_by_speed[distance_by_speed['Message'] > 100]
ax[3].scatter(x = distance_by_speed['Time'], y=distance_by_speed['Message'], c=distance_by_speed['Time'], cmap='winter', s= 3)
ax[3].set_title('Distance divided by Speed when ACC is on')
ax[3].set_xlabel('Time')
ax[3].set_ylabel('Distance divided by Speed [s]')
plt.suptitle('Data file: ' + strymread_obj.csvfile)
plt.show()
for strymreadobj in rlist:
speed_headway_plot(strymreadobj)